在上個範例中,在說明 JSON 資料格式 ng-repeat 的應用時,因為我偷偷地使用了 Twitter Bootstrap ,所以表格變漂亮了。但不能老是跟大家一樣都套 Bootstrap ,客戶最愛客製了,就是想要與眾不同。在此, ng 也提供了兩個好用的 API ng-class-odd, ng-class-even 。
奇 / 偶列變色
雖然在 CSS3 當中有提供偽元素 :nth-child() 設定 table 中奇 / 偶數列的 style ,但因為 IE8 以前的版本並不支援,所以只好自己來實作。
如果不會 JavaScript, jQuery 的設計師,可能只好慢慢地複製貼上;如果會 jQuery 的設計師,或許可以寫個簡短的 code 來套用。但是現在, ng 很貼心的提供了 ng-class-odd , ng-class-even 來實作變色功能,只要在 HTML 中寫個 attribute 就能夠輕鬆完成。
HTML :
<table>
<tr ng-repeat="obj in data" ng-class-odd="'odd'" ng-class-even="'even'">
<td ng-repeat="value in obj" ng-bind="value"></td>
</tr>
</table>
CSS :
.odd {
background-color: #ffdb58;
}
.even {
background-color: #597dff;
}
不知道各位有沒有發現,在使用 ng-class-odd 及 ng-class-even 時,值是以 'odd' 、 'even' 字串的方式呈現。
這是因為在使用 ng- 相關功能的時候,他會去進去 controller 問問橋樑 $scope ,有沒有我這名稱的屬性可以用啊? ,但由於我不想設定 class name 還要透過 $scope 來設定,所以我就直接將名稱以字串的方式做設定,這樣 ng 就知道這設定只是個普通的字串,而不是 $scope 的屬性。
如果如果,真的要藉由 controller 來做設定,當然也是可以的
HTML :
<table>
<tr ng-repeat="obj in data" ng-class-odd="classNameOdd" ng-class-even="classNameEven">
<td ng-repeat="value in obj" ng-bind="value"></td>
</tr>
</table>
JavaScript :
$scope.classNameOdd = 'odd';
$scope.classNameEven = 'even';
如同修改過後的 code ,ng-class-odd 、 ng-class-even 若不以字串的方式設定,即會去 controller 中尋找相對應 $scope 的屬性,並將值作 binding 。
今天的紀錄比較少,因為好晚了,就此先休息。明天再來繼續衝刺吧!
此文同步更新於 EdenYeh's GitHub
歡迎各位多給我些指教,我會虛心學習的 =D
好文推薦提到:
javascript中的位元運算子 (3)
用Javascript征服演算法 (2-Gray Code)
Day11 實作 WinJS.UI.Rating